import 'package:flutter/foundation.dart';

class PlatformAdapter {
  static bool get isWeb => kIsWeb;
  static bool get isMobile => !kIsWeb;
  static bool get isDesktop => !kIsWeb && (defaultTargetPlatform == TargetPlatform.linux || 
                                          defaultTargetPlatform == TargetPlatform.macOS || 
                                          defaultTargetPlatform == TargetPlatform.windows);
  
  static bool get isAndroid => !kIsWeb && defaultTargetPlatform == TargetPlatform.android;
  static bool get isIOS => !kIsWeb && defaultTargetPlatform == TargetPlatform.iOS;
  
  /// 获取平台支持的存储路径
  static Future<String?> getStoragePath() async {
    if (isWeb) {
      // Web平台使用IndexedDB，不需要文件路径
      return null;
    }
    
    try {
      // 仅在非Web平台使用path_provider
      if (!kIsWeb) {
        // 这里需要条件导入，但Dart不支持动态导入
        // 所以我们使用try-catch来处理
        return null; // 在实际使用中会被其他地方处理
      }
      return null;
    } catch (e) {
      print('Failed to get storage path: $e');
      return null;
    }
  }
  
  /// 检查平台是否支持文件系统操作
  static bool get supportsFileSystem => !isWeb;
  
  /// 检查平台是否支持本地通知
  static bool get supportsLocalNotifications => !isWeb;
  
  /// 检查平台是否支持后台任务
  static bool get supportsBackgroundTasks => !isWeb;
  
  /// 检查平台是否支持设备信息
  static bool get supportsDeviceInfo => true;
  
  /// 检查平台是否支持网络信息
  static bool get supportsNetworkInfo => true;
  
  /// 检查平台是否支持权限管理
  static bool get supportsPermissions => !isWeb;
  
  /// 检查平台是否支持相机
  static bool get supportsCamera => !isWeb;
  
  /// 检查平台是否支持位置服务
  static bool get supportsLocation => !isWeb;
  
  /// 检查平台是否支持生物识别
  static bool get supportsBiometrics => !isWeb;
  
  /// 获取平台标识符
  static String get platformName {
    if (isWeb) return 'web';
    if (isAndroid) return 'android';
    if (isIOS) return 'ios';
    if (defaultTargetPlatform == TargetPlatform.windows) return 'windows';
    if (defaultTargetPlatform == TargetPlatform.macOS) return 'macos';
    if (defaultTargetPlatform == TargetPlatform.linux) return 'linux';
    return 'unknown';
  }
  
  /// 获取平台特定的缓存大小限制
  static int get maxCacheSize {
    if (isWeb) return 50 * 1024 * 1024; // 50MB for web
    if (isMobile) return 200 * 1024 * 1024; // 200MB for mobile
    return 500 * 1024 * 1024; // 500MB for desktop
  }
  
  /// 获取平台特定的数据库大小限制
  static int get maxDatabaseSize {
    if (isWeb) return 100 * 1024 * 1024; // 100MB for web
    if (isMobile) return 500 * 1024 * 1024; // 500MB for mobile
    return 1024 * 1024 * 1024; // 1GB for desktop
  }
}